/**
 * 获取rsa公私密钥对，用于登录时加密密码
 *
 * 先去leveldb取rsa，若无则创建
 */
import forge from 'node-forge';
const { rsa, publicKeyToRSAPublicKeyPem, privateKeyToPem } = forge.pki;
import localStorage from 'src-ssr/util/levelDB';
import { generateKeyPairSync } from 'crypto';
/**
 * 初始化rsa
 */
async function init () {
  const { privateKey, publicKey } = rsa.generateKeyPair({ bits: 2048, workers: -1 });
  const rsaKey = {
    publicKey: publicKeyToRSAPublicKeyPem(publicKey, 72).replace(/\r/g, ''),
    privateKey: privateKeyToPem(privateKey, 72).replace(/\r/g, '')
  };
  /* const { publicKey, privateKey } = generateKeyPairSync('rsa', {
    modulusLength: 2048, // 模数长度，一般选择 2048 或以上
    publicKeyEncoding: {
      type: 'spki', // 公钥编码格式
      format: 'pem' // 公钥输出格式
    },
    privateKeyEncoding: {
      type: 'pkcs8', // 私钥编码格式
      format: 'pem' // 私钥输出格式
      // cipher: 'aes-256-cbc', // 加密算法，可选
      // passphrase: 'muduoyuPass' // 加密密码，可选
    }
  });

  const rsaKey = { publicKey, privateKey }; */

  localStorage.db && await localStorage.db.put('RSA', rsaKey);
  return rsaKey;
}
/**
 * 取公私钥对
 */
async function getKeyPair () {
  let rsaKey = {};
  try {
    rsaKey = await localStorage.db.get('RSA'); // 从leveldb里取值
  } catch (e) { // 若无rsa，则创建新值
    rsaKey = init();
  }
  return rsaKey;
};

export default { init, getKeyPair };
